package com.texaco.chapasFutbol.entidades;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.texaco.chapasFutbol.R;

/**
 * Clase que maneja las opciones del juego.
 * 
 * @author texaco
 * 
 */
public class Opciones {
	/*
	 * Modos de juego
	 */
	public static final String MODO_GOLES = "MODO_GOLES"; // AQUÍ PUEDE HABER 2
															// VERTIENTES, AL
															// MEJOR DE X GOLES,
															// O AL PRIMERO QUE
															// LLEGUE A X GOLES
	public static final String MODO_TIEMPO = "MODO_TIEMPO";
	public static final String MODO_TURNOS = "MODO_TURNOS";
	
	public static final Map<String,Integer> modosJuego = new HashMap<String,Integer>(){
		/**
		 * 
		 */
		private static final long serialVersionUID = -4491686083122526642L;

		{
			put(MODO_GOLES, R.string.tLabelModoGoles);
			put(MODO_TIEMPO, R.string.tLabelModoTiempo);
			put(MODO_TURNOS, R.string.tLabelModoTurnos);
		}
	};

	private final static List<String> listaModosJuegos = new ArrayList<String>() {
		/**
		 * 
		 */
		private static final long serialVersionUID = -4491686083122526642L;

		{
			add(MODO_GOLES);
			add(MODO_TIEMPO);
			add(MODO_TURNOS);
		}
	};
	private int indiceModo = 0;

	private int tiempoMaximo = 30;
//	private int anchoBarraTurnoMaximo = 320;
	private int golesMax = 3;
	private int turnos = 2;
	
	private boolean multiplayer;
	
	/**
	 * Indica si la música está habilitada
	 */
	private boolean musicEnable = true;

	/**
	 * Indica si el sonido está habilitado
	 */
	private boolean soundEnable = true;

	public int getTiempoMaximo() {
		return tiempoMaximo;
	}

//	public int getAnchoBarraTurnoMaximo() {
//		return anchoBarraTurnoMaximo;
//	}

	public int getGolesMax() {
		return golesMax;
	}

	public int getTurnos() {
		return turnos;
	}

	public boolean isModoGoles() {
		return listaModosJuegos.get(indiceModo).equals(MODO_GOLES);
	}

	public boolean isModoTiempo() {
		return listaModosJuegos.get(indiceModo).equals(MODO_TIEMPO);
	}

	public boolean isModoTurnos() {
		return listaModosJuegos.get(indiceModo).equals(MODO_TURNOS);
	}

	public void modoAnterior() {
		if (indiceModo == 0) {
			indiceModo = 2;
		} else {
			indiceModo--;
		}
	}

	public String getModoJuego() {
		return listaModosJuegos.get(indiceModo);
	}

	public void modoPosterior() {
		if (indiceModo == 2) {
			indiceModo = 0;
		} else {
			indiceModo++;
		}
	}

	public void menosTiempo() {
		if (tiempoMaximo < 31) {
			tiempoMaximo = 200;
		} else {
			tiempoMaximo -= 5;
		}
	}

	public void masTiempo() {
		if (tiempoMaximo > 199) {
			tiempoMaximo = 30;
		} else {
			tiempoMaximo += 5;
		}
	}

	public void menosGoles() {
		if (golesMax <= 3) {
			golesMax = 7;
		} else {
			golesMax--;
		}
	}

	public void masGoles() {
		if (golesMax >= 7) {
			golesMax = 3;
		} else {
			golesMax++;
		}
	}

	public void menosTurnos() {
		if (turnos <= 2) {
			turnos = 8;
		} else {
			turnos--;
			turnos--;
		}
	}

	public void masTurnos() {
		if (turnos >= 8) {
			turnos = 2;
		} else {
			turnos++;
			turnos++;
		}
	}

	/**
	 * Indica si la partida es multiplayer.
	 * @return
	 */
	public boolean isMultiplayer() {
		return this.multiplayer;
	}

	/**
	 * Cambia el valor del modo multiplayer
	 */
	public void toggleMultiplayer() {
		multiplayer = !multiplayer;
	}

	/**
	 * Obtiene la etiqueta del modo de juego
	 * @return
	 */
	public int getLabelModoJuego() {
		return Opciones.modosJuego.get(this.getModoJuego());
	}

	
	public boolean isSoundEnable() {
		return this.soundEnable;
	}

	public boolean isMusicEnable() {
		return this.musicEnable;
	}
	
	/**
	 * Cambia el valor de habilitación en el sonido.
	 */
	public void toggleSound() {
		soundEnable = !soundEnable;
	}
	
	/**
	 * Cambia el valor de habilitación en la música.
	 */
	public void toggleMusic() {
		musicEnable = !musicEnable;
	}

	/**
	 * Establece el modo de juego como OFFLINE.
	 */
	public void setOffline() {
		this.multiplayer = false;
		this.golesMax = 3;
		this.indiceModo = listaModosJuegos.indexOf(MODO_GOLES);
	}
	
	/**
	 * Establece el modo de juego como ONLINE.
	 */
	public void setOnline() {
		this.multiplayer = true;
		this.golesMax = 3;
		this.indiceModo = listaModosJuegos.indexOf(MODO_GOLES);
	}

}
